package com.zhentao.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zhentao.pojo.Category;
import com.zhentao.service.CategoryService;
import com.zhentao.service.FileStorageService;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @autho：周明震
 * @date 2025/7/1
 */
@RestController
@RequestMapping("category")
public class CategoryController {
    @Autowired
    CategoryService categoryService;
    @Autowired
    FileStorageService fileStorageService;
    @PostMapping("categoryAdd")
    @SneakyThrows
    public String categoryAdd(@RequestParam("file") MultipartFile file,
                              @RequestParam String name,
                              @RequestParam(required = false) Integer parentId,
                              @RequestParam Integer status) {
        // 验证parentId的合法性
        if (parentId != null && parentId != 0) {
            // 获取所有一级分类
            List<Category> firstLevelCategories = findFirstLevel();
            boolean isValidParent = false;
            
            // 检查是否是一级分类的ID
            for (Category firstLevel : firstLevelCategories) {
                if (firstLevel.getId().equals(parentId)) {
                    isValidParent = true;
                    break;
                }
                
                // 如果不是一级分类，检查是否是二级分类的ID
                QueryWrapper<Category> wrapper = new QueryWrapper<>();
                wrapper.eq("parent_id", firstLevel.getId());
                List<Category> secondLevelCategories = categoryService.list(wrapper);
                
                for (Category secondLevel : secondLevelCategories) {
                    if (secondLevel.getId().equals(parentId)) {
                        // 检查该二级分类下的三级分类数量
                        QueryWrapper<Category> thirdWrapper = new QueryWrapper<>();
                        thirdWrapper.eq("parent_id", parentId);
                        long thirdLevelCount = categoryService.count(thirdWrapper);
                        
                        isValidParent = true;
                        break;
                    }
                }
                
                if (isValidParent) {
                    break;
                }
            }
            
            if (!isValidParent) {
                return "无效的父分类ID";
            }
        }

        // 创建分类实体并设置基本信息
        Category category = new Category();
        category.setName(name);                // 设置分类名称
        category.setStatus(status);            // 设置分类状态(0:禁用,1:启用)
        category.setCreateTime(new Date());    // 设置创建时间
        category.setUpdateTime(new Date());    // 设置更新时间
        category.setIsDeleted(0);              // 设置删除标记(0:未删除)
        category.setParentId(parentId);        // 设置父分类ID(可为空，表示一级分类)

        // 处理上传的图片文件
        String filename = file.getOriginalFilename();  // 获取原始文件名
        InputStream inputStream = file.getInputStream();  // 获取文件输入流
        // 调用文件存储服务上传图片，并获取访问URL
        String url = fileStorageService.uploadImgFile(filename, inputStream);
        category.setImageUrl(url);  // 设置分类图片URL

        // 保存分类信息到数据库
        boolean b = categoryService.save(category);
        // 根据保存结果返回相应信息
        if (b) {
            return "添加成功";
        } else {
            return "添加失败";
        }
    }
//    //查询三级菜单
//    @PostMapping("categoryFind")
//    public List<Category> categoryFind(@RequestParam(required = false) Integer parentId) {
//        // 查询数据库获取所有分类数据
//        List<Category> list = categoryService.list();
//        // 用于存储一级菜单的集合
//        ArrayList<Category> list1 = new ArrayList<>();
//        // 处理parentId为null的情况，即查询一级菜单
//        if (parentId == null) {
//            // 遍历所有分类，筛选出parentId为null或0的一级菜单
//            for (Category category : list) {
//                if (category.getParentId() == null || category.getParentId() == 0) {
//                    list1.add(category);
//                }
//            }
//            // 返回一级菜单列表
//            return list1;
//        } else {
//            // 先筛选出所有一级菜单（parentId为null或0）
//            for (Category category : list) {
//                if (category.getParentId() == null || category.getParentId() == 0) {
//                    list1.add(category);
//                }
//            }
//            // 尝试从一级菜单中查找id等于parentId的分类
//            for (Category category : list1) {
//                if (category.getId() == parentId) {
//                    // 构建查询条件：查询parent_id等于parentId的分类（二级菜单）
//                    QueryWrapper<Category> wrapper = new QueryWrapper<>();
//                    wrapper.eq("parent_id", parentId);
//                    List<Category> list2 = categoryService.list(wrapper);
//                    // 返回查询到的二级菜单
//                    return list2;
//                }
//            }
//            // 如果未找到直接匹配的一级菜单，尝试查找二级菜单下的三级菜单
//            for (Category category : list1) {
//                Integer id = category.getId();
//                // 查询该一级菜单下的所有二级菜单
//                QueryWrapper<Category> wrapper = new QueryWrapper<>();
//                wrapper.eq("parent_id", id);
//                List<Category> list2 = categoryService.list(wrapper);
//                // 遍历二级菜单，查找id等于parentId的二级菜单
//                for (Category category1 : list2) {
//                    Integer id2 = category1.getId();
//                    if (id2 == parentId) {
//                        // 构建查询条件：查询该二级菜单下的三级菜单
//                        QueryWrapper<Category> wrapper2 = new QueryWrapper<>();
//                        wrapper2.eq("parent_id", parentId);
//                        List<Category> list3 = categoryService.list(wrapper2);
//                        // 返回查询到的三级菜单
//                        return list3;
//                    }
//                }
//            }
//            // 如果未找到任何匹配的菜单，返回null
//            return null;
//        }
//    }
    //回显
    @PostMapping("categoryUpdateShow")
    public Category categoryUpdate(@RequestParam Integer id){
        Category category = categoryService.getById(id);
        return category;
    }
    //删除分类信息
    @PostMapping("categoryDelete")
    public String categoryDelete(@RequestParam Integer id){
        boolean b = categoryService.removeById(id);
        if (b) {
            return "删除成功";
        } else {
            return "删除失败";
        }
    }
    @PostMapping("categoryUpdate")
    @SneakyThrows
    public String categoryUpdate(@RequestParam Integer id,@RequestParam("file") MultipartFile file,
                              @RequestParam String name,
                              @RequestParam(required = false) Integer parentId,
                              @RequestParam Integer status){
        Category category = categoryService.getById(id);
        category.setName(name);                // 设置分类名称
        category.setStatus(status);            // 设置分类状态(0:禁用,1:启用)
        category.setUpdateTime(new Date());    // 设置更新时间
        category.setParentId(parentId);        // 设置父分类ID(可为空，表示一级分类)
        // 处理上传的图片文件
        String filename = file.getOriginalFilename();  // 获取原始文件名
        InputStream inputStream = file.getInputStream();  // 获取文件输入流
        // 调用文件存储服务上传图片，并获取访问URL
        String url = fileStorageService.uploadImgFile(filename, inputStream);
        category.setImageUrl(url);  // 设置分类图片URL
        // 修改分类信息到数据库
        boolean b = categoryService.updateById(category);
        // 根据保存结果返回相应信息
        if (b) {
            return "修改成功";
        } else {
            return "修改失败";
        }
    }

    /**
     * 查询一级菜单
     * @return 返回所有一级菜单列表
     */
    @PostMapping("findFirstLevel")
    public List<Category> findFirstLevel() {
        // 查询数据库获取所有分类数据
        List<Category> allCategories = categoryService.list();
        // 用于存储一级菜单的集合
        ArrayList<Category> firstLevelCategories = new ArrayList<>();
        // 遍历所有分类，筛选出parentId为null或0的一级菜单
        for (Category category : allCategories) {
            if (category.getParentId() == null || category.getParentId() == 0) {
                firstLevelCategories.add(category);
            }
        }
        return firstLevelCategories;
    }

    /**
     * 查询二级菜单
     * @param parentId 一级菜单ID
     * @return 返回指定一级菜单下的所有二级菜单
     */
    @PostMapping("findSecondLevel")
    public List<Category> findSecondLevel(@RequestParam Integer parentId) {
        // 先验证parentId是否为一级菜单的ID
        List<Category> firstLevelCategories = findFirstLevel();
        for (Category category : firstLevelCategories) {
            if (category.getId().equals(parentId)) {
                // 如果是一级菜单，则查询其下的二级菜单
                QueryWrapper<Category> wrapper = new QueryWrapper<>();
                wrapper.eq("parent_id", parentId);
                return categoryService.list(wrapper);
            }
        }
        return new ArrayList<>(); // 如果parentId不是一级菜单的ID，返回空列表
    }

    /**
     * 查询三级菜单
     * @param parentId 二级菜单ID
     * @return 返回指定二级菜单下的所有三级菜单
     */
    @PostMapping("findThirdLevel")
    public List<Category> findThirdLevel(@RequestParam Integer parentId) {
        // 获取所有一级菜单
        List<Category> firstLevelCategories = findFirstLevel();
        
        // 遍历一级菜单，查找其下的二级菜单
        for (Category firstLevel : firstLevelCategories) {
            QueryWrapper<Category> wrapper = new QueryWrapper<>();
            wrapper.eq("parent_id", firstLevel.getId());
            List<Category> secondLevelCategories = categoryService.list(wrapper);
            
            // 在二级菜单中查找匹配的parentId
            for (Category secondLevel : secondLevelCategories) {
                if (secondLevel.getId().equals(parentId)) {
                    // 如果找到匹配的二级菜单，则查询其下的三级菜单
                    QueryWrapper<Category> thirdWrapper = new QueryWrapper<>();
                    thirdWrapper.eq("parent_id", parentId);
                    return categoryService.list(thirdWrapper);
                }
            }
        }
        return new ArrayList<>(); // 如果parentId不是二级菜单的ID，返回空列表
    }
}
